/*
 * @copyright 2010 Gerald Jacobson
 * @license GNU General Public License
 * 
 * This file is part of My Quick Rules.
 *
 * My Quick Rules is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * My Quick Rules is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with My Quick Rules.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.amphiprion.myquickrules.entity;

import java.io.Serializable;

import android.graphics.Color;

/**
 * @author Amphiprion
 * 
 */
public class MainRule implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String id;
	private float width;
	private float height;
	public boolean loopOnPhase;
	private Overview overview;
	public ColorList colors;
	private PhaseList phases;

	/**
 * 
 */
	public MainRule() {
		colors = new ColorList();
	}

	/**
	 * @return the width
	 */
	public float getWidth() {
		return width;
	}

	/**
	 * @param width
	 *            the width to set
	 */
	public void setWidth(float width) {
		this.width = width;
	}

	/**
	 * @return the height
	 */
	public float getHeight() {
		return height;
	}

	/**
	 * @param height
	 *            the height to set
	 */
	public void setHeight(float height) {
		this.height = height;
	}

	/**
	 * @return the overview
	 */
	public Overview getOverview() {
		return overview;
	}

	/**
	 * @param overview
	 *            the overview to set
	 */
	public void setOverview(Overview overview) {
		this.overview = overview;
	}

	public int getColor(String id) {
		for (NamedColor nc : colors) {
			if (id.equals(nc.name)) {
				return nc.getValue();
			}
		}
		return Color.BLACK;
	}

	/**
	 * @return the phases
	 */
	public PhaseList getPhases() {
		return phases;
	}

	/**
	 * @param phases
	 *            the phases to set
	 */
	public void setPhases(PhaseList phases) {
		this.phases = phases;
	}

	/**
	 * @return
	 */
	public StringBuffer toXml() {
		StringBuffer sb = new StringBuffer();
		sb.append("<gamerule width=\"");
		sb.append(width);
		sb.append("\" height=\"");
		sb.append(height);
		sb.append("\" loopOnPhase=\"");
		sb.append(loopOnPhase);
		sb.append("\">");
		sb.append("\n");

		if (overview != null && overview.filename != null) {
			sb.append("<overview file=\"");
			sb.append(overview.filename);
			sb.append("\"");
			if (overview.backgroundName != null) {
				sb.append(" background=\"");
				sb.append(overview.backgroundName);
				sb.append("\"");
			}
			sb.append(" visibleHeight=\"");
			sb.append(overview.visibleHeight);
			sb.append("\" />");
			sb.append("\n");
		}

		if (phases != null) {
			boolean addPhase = false;
			for (Phase p : phases) {
				if (p.filename != null) {
					addPhase = true;
					break;
				}
			}
			if (addPhase) {
				sb.append("<phases>\n");
				for (Phase p : phases) {
					if (p.filename != null) {
						sb.append("<phase file=\"");
						sb.append(p.filename);
						sb.append("\"");
						if (p.backgroundName != null) {
							sb.append(" background=\"");
							sb.append(p.backgroundName);
							sb.append("\"");
						}
						sb.append("/>\n");
					}
				}
				sb.append("</phases>\n");
			}
		}

		if (colors != null) {
			boolean addColor = false;
			for (NamedColor c : colors) {
				if (c.name != null) {
					addColor = true;
					break;
				}
			}
			if (addColor) {
				sb.append("<colors>\n");
				for (NamedColor c : colors) {
					if (c.name != null) {
						sb.append("<color id=\"");
						sb.append(c.name);
						sb.append("\"");
						sb.append(" value=\"");
						sb.append(c.getPlainValue());
						sb.append("\"");
						sb.append("/>\n");
					}
				}
				sb.append("</colors>\n");
			}
		}

		sb.append("</gamerule>");
		return sb;
	}
}
